// 购物车数据
import { insertCart, findCartList, deleteCart, updateCart, checkAllCart } from '@/api/cart'
export default {
  namespaced: true,
  state () {
    return {
      cartList: []
    }
  },
  mutations: {
    setCartList (state, payload) {
      state.cartList = payload
    }
  },
  actions: {
    // 更新购物车中商品的数量
    async asyncChangeCount (context, goods) {
      // 1. 调用接口，修改商品的数量
      await updateCart(goods)
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 3. 更新state
      context.commit('setCartList', res.result)
    },
    // 更新购物车中商品的选中的状态
    async asyncSingleCheck (context, goods) {
      // 1. 调用接口，修改商品的状态
      await updateCart(goods)
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 3. 更新state
      context.commit('setCartList', res.result)
    },

    // 更新购物车
    async findCartList (context) {
      const res = await findCartList()
      console.log('findCartList', res)
      // 3. 更新state
      context.commit('setCartList', res.result)
    },

    async asyncSetCartList (context, payload) {
      // 1. 调用接口，添加到购物车
      console.log('asyncSetCartList', payload)
      await insertCart(payload)
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 3. 更新state
      context.commit('setCartList', res.result)
    },
    // 删除到购物车
    async asyncDelCart (context, skuIds) {
      console.log('skuIds', skuIds)
      // 1. 调用接口，删除到购物车
      console.log('deleteCart', skuIds)
      await deleteCart(skuIds)
      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      console.log(res)
      // 3. 更新state
      context.commit('setCartList', res.result)
    },
    // 全选购物车按钮
    async asyncAllCheck (context, selected) {
      // 获取购物车列表数据 筛选出skuId
      const ids = context.state.cartList.map(it => it.skuId)
      // 1. 调用接口，修改所有商品的选中状态
      await checkAllCart({ selected, ids })

      // 2. 重新从购物车取出最新的数据
      const res = await findCartList()
      // 3. 更新state
      context.commit('setCartList', res.result)
    }
  },
  getters: {
    // 商品总数
    allCount (state) {
      return state.cartList.reduce((a, c) => {
        // console.log('a', a, 'c', c)
        return a + c.count
      }, 0)
    },
    // 总钱数 商品数量 * 商品单价
    allPrice (state) {
      return state.cartList.reduce((a, c) => a + c.count * c.price, 0)
    },
    // 选中的商品数量
    selectedCount (state) {
      return state.cartList.filter(item => item.selected).reduce((a, c) => {
        return a + c.count
      }, 0)
    },
    // 选中商品的价格
    selectedPrice (state) {
      return state.cartList.filter(item => item.selected).reduce((a, c) => {
        return a + c.count * c.price
      }, 0)
    }
  }

}
